/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.mrroman.linksender;

import java.beans.BeanDescriptor;
import java.beans.EventSetDescriptor;
import java.beans.IntrospectionException;
import java.beans.MethodDescriptor;
import java.beans.PropertyDescriptor;
import java.beans.SimpleBeanInfo;
import java.util.ResourceBundle;

/**
 *
 * @author gorladam
 */
public class ConfigurationBeanInfo extends SimpleBeanInfo {

    static ResourceBundle messages = ResourceBundle.getBundle("com.mrroman.linksender.resources.locale");

    // Bean descriptor//GEN-FIRST:BeanDescriptor
    /*lazy BeanDescriptor*/
    private static BeanDescriptor getBdescriptor(){
        BeanDescriptor beanDescriptor = new BeanDescriptor  ( com.mrroman.linksender.Configuration.class , null ); // NOI18N//GEN-HEADEREND:BeanDescriptor

    // Here you can add code for customizing the BeanDescriptor.

        return beanDescriptor;     }//GEN-LAST:BeanDescriptor


    // Property identifiers//GEN-FIRST:Properties
    private static final int PROPERTY_address = 0;
    private static final int PROPERTY_authorLabelFontName = 1;
    private static final int PROPERTY_authorLabelFontSize = 2;
    private static final int PROPERTY_authorLabelFontStyle = 3;
    private static final int PROPERTY_dateLabelFontName = 4;
    private static final int PROPERTY_dateLabelFontSize = 5;
    private static final int PROPERTY_dateLabelFontStyle = 6;
    private static final int PROPERTY_errorMessageColor = 7;
    private static final int PROPERTY_hideGroupMessages = 8;
    private static final int PROPERTY_infoMessageColor = 9;
    private static final int PROPERTY_loopbackMode = 10;
    private static final int PROPERTY_messageLabelFontName = 11;
    private static final int PROPERTY_messageLabelFontSize = 12;
    private static final int PROPERTY_messageLabelFontStyle = 13;
    private static final int PROPERTY_nick = 14;
    private static final int PROPERTY_outputDirectory = 15;
    private static final int PROPERTY_popupPanelColor = 16;
    private static final int PROPERTY_port = 17;
    private static final int PROPERTY_privateMessageColor = 18;
    private static final int PROPERTY_proxyHost = 19;
    private static final int PROPERTY_proxyPort = 20;
    private static final int PROPERTY_sendToTwitter = 21;

    // Property array 
    /*lazy PropertyDescriptor*/
    private static PropertyDescriptor[] getPdescriptor(){
        PropertyDescriptor[] properties = new PropertyDescriptor[22];
    
        try {
            properties[PROPERTY_address] = new PropertyDescriptor ( "address", com.mrroman.linksender.Configuration.class, "getAddress", "setAddress" ); // NOI18N
            properties[PROPERTY_address].setPreferred ( true );
            properties[PROPERTY_address].setShortDescription ( messages.getString("conf_tip_address") );
            properties[PROPERTY_authorLabelFontName] = new PropertyDescriptor ( "authorLabelFontName", com.mrroman.linksender.Configuration.class, "getAuthorLabelFontName", "setAuthorLabelFontName" ); // NOI18N
            properties[PROPERTY_authorLabelFontName].setShortDescription ( messages.getString("conf_tip_author_font_name") );
            properties[PROPERTY_authorLabelFontSize] = new PropertyDescriptor ( "authorLabelFontSize", com.mrroman.linksender.Configuration.class, "getAuthorLabelFontSize", "setAuthorLabelFontSize" ); // NOI18N
            properties[PROPERTY_authorLabelFontSize].setShortDescription ( messages.getString("conf_tip_author_font_size") );
            properties[PROPERTY_authorLabelFontStyle] = new PropertyDescriptor ( "authorLabelFontStyle", com.mrroman.linksender.Configuration.class, "getAuthorLabelFontStyle", "setAuthorLabelFontStyle" ); // NOI18N
            properties[PROPERTY_authorLabelFontStyle].setShortDescription ( messages.getString("conf_tip_author_font_style") );
            properties[PROPERTY_dateLabelFontName] = new PropertyDescriptor ( "dateLabelFontName", com.mrroman.linksender.Configuration.class, "getDateLabelFontName", "setDateLabelFontName" ); // NOI18N
            properties[PROPERTY_dateLabelFontName].setShortDescription ( messages.getString("conf_tip_date_font_name") );
            properties[PROPERTY_dateLabelFontSize] = new PropertyDescriptor ( "dateLabelFontSize", com.mrroman.linksender.Configuration.class, "getDateLabelFontSize", "setDateLabelFontSize" ); // NOI18N
            properties[PROPERTY_dateLabelFontSize].setShortDescription ( messages.getString("conf_tip_date_font_size") );
            properties[PROPERTY_dateLabelFontStyle] = new PropertyDescriptor ( "dateLabelFontStyle", com.mrroman.linksender.Configuration.class, "getDateLabelFontStyle", "setDateLabelFontStyle" ); // NOI18N
            properties[PROPERTY_dateLabelFontStyle].setShortDescription ( messages.getString("conf_tip_date_font_style") );
            properties[PROPERTY_errorMessageColor] = new PropertyDescriptor ( "errorMessageColor", com.mrroman.linksender.Configuration.class, "getErrorMessageColor", "setErrorMessageColor" ); // NOI18N
            properties[PROPERTY_errorMessageColor].setShortDescription ( messages.getString("conf_tip_error_color") );
            properties[PROPERTY_hideGroupMessages] = new PropertyDescriptor ( "hideGroupMessages", com.mrroman.linksender.Configuration.class, "isHideGroupMessages", "setHideGroupMessages" ); // NOI18N
            properties[PROPERTY_hideGroupMessages].setShortDescription ( messages.getString("conf_tip_hideGroupMessages") );
            properties[PROPERTY_infoMessageColor] = new PropertyDescriptor ( "infoMessageColor", com.mrroman.linksender.Configuration.class, "getInfoMessageColor", "setInfoMessageColor" ); // NOI18N
            properties[PROPERTY_infoMessageColor].setShortDescription ( messages.getString("conf_tip_info_color") );
            properties[PROPERTY_loopbackMode] = new PropertyDescriptor ( "loopbackMode", com.mrroman.linksender.Configuration.class, "isLoopbackMode", "setLoopbackMode" ); // NOI18N
            properties[PROPERTY_loopbackMode].setShortDescription ( messages.getString("conf_tip_loopback") );
            properties[PROPERTY_messageLabelFontName] = new PropertyDescriptor ( "messageLabelFontName", com.mrroman.linksender.Configuration.class, "getMessageLabelFontName", "setMessageLabelFontName" ); // NOI18N
            properties[PROPERTY_messageLabelFontName].setPreferred ( true );
            properties[PROPERTY_messageLabelFontName].setShortDescription ( messages.getString("conf_tip_message_font_name") );
            properties[PROPERTY_messageLabelFontSize] = new PropertyDescriptor ( "messageLabelFontSize", com.mrroman.linksender.Configuration.class, "getMessageLabelFontSize", "setMessageLabelFontSize" ); // NOI18N
            properties[PROPERTY_messageLabelFontSize].setShortDescription ( messages.getString("conf_tip_message_font_size") );
            properties[PROPERTY_messageLabelFontStyle] = new PropertyDescriptor ( "messageLabelFontStyle", com.mrroman.linksender.Configuration.class, "getMessageLabelFontStyle", "setMessageLabelFontStyle" ); // NOI18N
            properties[PROPERTY_messageLabelFontStyle].setShortDescription ( messages.getString("conf_tip_message_font_style") );
            properties[PROPERTY_nick] = new PropertyDescriptor ( "nick", com.mrroman.linksender.Configuration.class, "getNick", "setNick" ); // NOI18N
            properties[PROPERTY_nick].setShortDescription ( messages.getString("conf_tip_nick") );
            properties[PROPERTY_outputDirectory] = new PropertyDescriptor ( "outputDirectory", com.mrroman.linksender.Configuration.class, "getOutputDirectory", "setOutputDirectory" ); // NOI18N
            properties[PROPERTY_outputDirectory].setShortDescription ( messages.getString("conf_output_directory") );
            properties[PROPERTY_popupPanelColor] = new PropertyDescriptor ( "popupPanelColor", com.mrroman.linksender.Configuration.class, "getPopupPanelColor", "setPopupPanelColor" ); // NOI18N
            properties[PROPERTY_popupPanelColor].setShortDescription ( messages.getString("conf_tip_popup_panel_color") );
            properties[PROPERTY_port] = new PropertyDescriptor ( "port", com.mrroman.linksender.Configuration.class, "getPort", "setPort" ); // NOI18N
            properties[PROPERTY_port].setShortDescription ( messages.getString("conf_tip_port") );
            properties[PROPERTY_privateMessageColor] = new PropertyDescriptor ( "privateMessageColor", com.mrroman.linksender.Configuration.class, "getPrivateMessageColor", "setPrivateMessageColor" ); // NOI18N
            properties[PROPERTY_privateMessageColor].setPreferred ( true );
            properties[PROPERTY_privateMessageColor].setShortDescription ( messages.getString("conf_tip_priv_color") );
            properties[PROPERTY_proxyHost] = new PropertyDescriptor ( "proxyHost", com.mrroman.linksender.Configuration.class, "getProxyHost", "setProxyHost" ); // NOI18N
            properties[PROPERTY_proxyHost].setShortDescription ( messages.getString("proxy_host") );
            properties[PROPERTY_proxyPort] = new PropertyDescriptor ( "proxyPort", com.mrroman.linksender.Configuration.class, "getProxyPort", "setProxyPort" ); // NOI18N
            properties[PROPERTY_proxyPort].setShortDescription ( messages.getString("proxy_port") );
            properties[PROPERTY_sendToTwitter] = new PropertyDescriptor ( "sendToTwitter", com.mrroman.linksender.Configuration.class, "isSendToTwitter", "setSendToTwitter" ); // NOI18N
            properties[PROPERTY_sendToTwitter].setShortDescription ( messages.getString("conf_tip_sendToTwitter") );
        }
        catch(IntrospectionException e) {
            e.printStackTrace();
        }//GEN-HEADEREND:Properties

    // Here you can add code for customizing the properties array.

        return properties;     }//GEN-LAST:Properties

    // EventSet identifiers//GEN-FIRST:Events
    private static final int EVENT_propertyChangeListener = 0;
    private static final int EVENT_vetoableChangeListener = 1;

    // EventSet array
    /*lazy EventSetDescriptor*/
    private static EventSetDescriptor[] getEdescriptor(){
        EventSetDescriptor[] eventSets = new EventSetDescriptor[2];
    
        try {
            eventSets[EVENT_propertyChangeListener] = new EventSetDescriptor ( com.mrroman.linksender.Configuration.class, "propertyChangeListener", java.beans.PropertyChangeListener.class, new String[] {"propertyChange"}, "addPropertyChangeListener", "removePropertyChangeListener" ); // NOI18N
            eventSets[EVENT_vetoableChangeListener] = new EventSetDescriptor ( com.mrroman.linksender.Configuration.class, "vetoableChangeListener", java.beans.VetoableChangeListener.class, new String[] {"vetoableChange"}, "addVetoableChangeListener", "removeVetoableChangeListener" ); // NOI18N
        }
        catch(IntrospectionException e) {
            e.printStackTrace();
        }//GEN-HEADEREND:Events

    // Here you can add code for customizing the event sets array.

        return eventSets;     }//GEN-LAST:Events

    // Method identifiers//GEN-FIRST:Methods
    private static final int METHOD_applicationName0 = 0;
    private static final int METHOD_assignProperties1 = 1;
    private static final int METHOD_init2 = 2;
    private static final int METHOD_load3 = 3;
    private static final int METHOD_save4 = 4;
    private static final int METHOD_settingsDirectory5 = 5;

    // Method array 
    /*lazy MethodDescriptor*/
    private static MethodDescriptor[] getMdescriptor(){
        MethodDescriptor[] methods = new MethodDescriptor[6];
    
        try {
            methods[METHOD_applicationName0] = new MethodDescriptor(com.mrroman.linksender.Configuration.class.getMethod("applicationName", new Class[] {})); // NOI18N
            methods[METHOD_applicationName0].setDisplayName ( "" );
            methods[METHOD_assignProperties1] = new MethodDescriptor(com.mrroman.linksender.settings.Settings.class.getMethod("assignProperties", new Class[] {com.mrroman.linksender.settings.Settings.class})); // NOI18N
            methods[METHOD_assignProperties1].setDisplayName ( "" );
            methods[METHOD_init2] = new MethodDescriptor(com.mrroman.linksender.Configuration.class.getMethod("init", new Class[] {})); // NOI18N
            methods[METHOD_init2].setDisplayName ( "" );
            methods[METHOD_load3] = new MethodDescriptor(com.mrroman.linksender.settings.Settings.class.getMethod("load", new Class[] {java.lang.String.class})); // NOI18N
            methods[METHOD_load3].setDisplayName ( "" );
            methods[METHOD_save4] = new MethodDescriptor(com.mrroman.linksender.settings.Settings.class.getMethod("save", new Class[] {})); // NOI18N
            methods[METHOD_save4].setDisplayName ( "" );
            methods[METHOD_settingsDirectory5] = new MethodDescriptor(com.mrroman.linksender.settings.Settings.class.getMethod("settingsDirectory", new Class[] {})); // NOI18N
            methods[METHOD_settingsDirectory5].setDisplayName ( "" );
        }
        catch( Exception e) {}//GEN-HEADEREND:Methods

    // Here you can add code for customizing the methods array.
    
        return methods;     }//GEN-LAST:Methods

    private static java.awt.Image iconColor16 = null;//GEN-BEGIN:IconsDef
    private static java.awt.Image iconColor32 = null;
    private static java.awt.Image iconMono16 = null;
    private static java.awt.Image iconMono32 = null;//GEN-END:IconsDef
    private static String iconNameC16 = null;//GEN-BEGIN:Icons
    private static String iconNameC32 = null;
    private static String iconNameM16 = null;
    private static String iconNameM32 = null;//GEN-END:Icons

    private static final int defaultPropertyIndex = -1;//GEN-BEGIN:Idx
    private static final int defaultEventIndex = -1;//GEN-END:Idx

    
//GEN-FIRST:Superclass

    // Here you can add code for customizing the Superclass BeanInfo.

//GEN-LAST:Superclass
	
    /**
     * Gets the bean's <code>BeanDescriptor</code>s.
     * 
     * @return BeanDescriptor describing the editable
     * properties of this bean.  May return null if the
     * information should be obtained by automatic analysis.
     */
    public BeanDescriptor getBeanDescriptor() {
	return getBdescriptor();
    }

    /**
     * Gets the bean's <code>PropertyDescriptor</code>s.
     * 
     * @return An array of PropertyDescriptors describing the editable
     * properties supported by this bean.  May return null if the
     * information should be obtained by automatic analysis.
     * <p>
     * If a property is indexed, then its entry in the result array will
     * belong to the IndexedPropertyDescriptor subclass of PropertyDescriptor.
     * A client of getPropertyDescriptors can use "instanceof" to check
     * if a given PropertyDescriptor is an IndexedPropertyDescriptor.
     */
    public PropertyDescriptor[] getPropertyDescriptors() {
	return getPdescriptor();
    }

    /**
     * Gets the bean's <code>EventSetDescriptor</code>s.
     * 
     * @return  An array of EventSetDescriptors describing the kinds of 
     * events fired by this bean.  May return null if the information
     * should be obtained by automatic analysis.
     */
    public EventSetDescriptor[] getEventSetDescriptors() {
	return getEdescriptor();
    }

    /**
     * Gets the bean's <code>MethodDescriptor</code>s.
     * 
     * @return  An array of MethodDescriptors describing the methods 
     * implemented by this bean.  May return null if the information
     * should be obtained by automatic analysis.
     */
    public MethodDescriptor[] getMethodDescriptors() {
	return getMdescriptor();
    }

    /**
     * A bean may have a "default" property that is the property that will
     * mostly commonly be initially chosen for update by human's who are 
     * customizing the bean.
     * @return  Index of default property in the PropertyDescriptor array
     * 		returned by getPropertyDescriptors.
     * <P>	Returns -1 if there is no default property.
     */
    public int getDefaultPropertyIndex() {
        return defaultPropertyIndex;
    }

    /**
     * A bean may have a "default" event that is the event that will
     * mostly commonly be used by human's when using the bean. 
     * @return Index of default event in the EventSetDescriptor array
     *		returned by getEventSetDescriptors.
     * <P>	Returns -1 if there is no default event.
     */
    public int getDefaultEventIndex() {
        return defaultEventIndex;
    }

    /**
     * This method returns an image object that can be used to
     * represent the bean in toolboxes, toolbars, etc.   Icon images
     * will typically be GIFs, but may in future include other formats.
     * <p>
     * Beans aren't required to provide icons and may return null from
     * this method.
     * <p>
     * There are four possible flavors of icons (16x16 color,
     * 32x32 color, 16x16 mono, 32x32 mono).  If a bean choses to only
     * support a single icon we recommend supporting 16x16 color.
     * <p>
     * We recommend that icons have a "transparent" background
     * so they can be rendered onto an existing background.
     *
     * @param  iconKind  The kind of icon requested.  This should be
     *    one of the constant values ICON_COLOR_16x16, ICON_COLOR_32x32, 
     *    ICON_MONO_16x16, or ICON_MONO_32x32.
     * @return  An image object representing the requested icon.  May
     *    return null if no suitable icon is available.
     */
    public java.awt.Image getIcon(int iconKind) {
        switch ( iconKind ) {
        case ICON_COLOR_16x16:
            if ( iconNameC16 == null )
                return null;
            else {
                if( iconColor16 == null )
                    iconColor16 = loadImage( iconNameC16 );
                return iconColor16;
            }
        case ICON_COLOR_32x32:
            if ( iconNameC32 == null )
                return null;
            else {
                if( iconColor32 == null )
                    iconColor32 = loadImage( iconNameC32 );
                return iconColor32;
            }
        case ICON_MONO_16x16:
            if ( iconNameM16 == null )
                return null;
            else {
                if( iconMono16 == null )
                    iconMono16 = loadImage( iconNameM16 );
                return iconMono16;
            }
        case ICON_MONO_32x32:
            if ( iconNameM32 == null )
                return null;
            else {
                if( iconMono32 == null )
                    iconMono32 = loadImage( iconNameM32 );
                return iconMono32;
            }
	default: return null;
        }
    }

}

